package 创建型模型.单例模式;

/**
 * 这个模式将同步内容下放到if内部，提高了执行的效率
 * 不必每次获取对象时都进行同步，只有第一次才同步创建后就没必要同步了
 * 但是，由于编译器优化原因和jvm底层内部模型原因
 * 偶尔会出问题，不建议使用
 */
public class 双重检测锁式  {
    private 双重检测锁式(){}
    private static 双重检测锁式 e=null;
    public static 双重检测锁式 getInstance(){
        if (e == null) {
            双重检测锁式 e1;
            synchronized (双重检测锁式.class) {
                e1=e;
                if (e1==null) {
                    synchronized (双重检测锁式.class) {
                        if (e1 == null) {
                            e1=new 双重检测锁式();
                        }
                    }
                    e=e1;
                }
            }
        }
        return e;
    }
}
